home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / copperripple.lha / coppermagic.s next >
Encoding:
Text File  |  1990-09-13  |  4.4 KB  |  192 lines

  1.     section lame,code_c
  2.  
  3. openlibrary=     -408        ; Hier sind vordefinierte Adressen
  4. closelibrary=     -414        ; und Offsets, die wir spaeter
  5. forbid=     -132        ; brauchen werden
  6. permit=     -138
  7.  
  8. Trap_vec0  = $80
  9. Execbase   = $4
  10. Oldopen    = -$198
  11. Intenar    = $01c
  12. Intena     = $09a
  13. Dmaconr    = $002
  14. Dmacon     = $096
  15. Cop1lch    = $080
  16. Copjmp1    = $088
  17. Vposr      = $004
  18.  
  19.     Move.l    #Start,$80.w    ; Trap vector 0
  20.     Trap    #0        ; Execute trap 0 to give full control of the
  21.     Rts            ; 68000, needs an RTE to return.
  22.  
  23. Start:  ori.b #$80,$bfd100        ; Abwürgen der Laufwerke
  24.     ori.b #$8,$bfd100
  25.     andi.b #$f7,$bfd100
  26.     ori.b #$10,$bfd100
  27.     andi.b #$ef,$bfd100
  28.     
  29.     bsr    KillSys
  30.     bsr    copper
  31.     bsr    main
  32.     bsr    setupsys
  33.  
  34.     Rte        ; Return from exception 
  35.         
  36.  
  37. *****************************************************************************
  38. ;Killsys - Disable operating system and interrupts
  39. *****************************************************************************
  40. Killsys:
  41.     Move.l    $4.w,a6        ; Execbase vector
  42.     Lea    Gfxname(pc),a1    ; Pointer to "graphics.library" into a1
  43.     Jsr    Oldopen(a6)    ; Open this library
  44.     Lea    $dff000,a6    ; Pointer to custom chips
  45.     Move.l    d0,a0        ; Address of the graphics library
  46.     Move.l    38(a0),Sys_copl        ; Remember the System copperlist
  47.     Move    Intenar(a6),Int_set    ; System interrupts
  48.     Move    #$7fff,Intena(a6)    ; Now switch off all interrupts
  49.     Move.l    $6c.w,Vbl_vec        ; System vertical blanking int.
  50.     Move    Dmaconr(a6),Dma_set    ; System DMA
  51.     Move    #$7fff,Dmacon(a6)    ; Clear all DMA
  52.     Move    #$87c0,Dmacon(a6)    ; Now set the required DMA channels
  53.  
  54.     Move.l    #Cop,Cop1lch(a6)    ; Init. our own copperlist
  55.     Clr    Copjmp1(a6)
  56.  
  57.     Rts
  58.  
  59. Gfxname:        dc.b "graphics.library",0
  60.     Even
  61. *****************************************************************************
  62. ;Sysreturn - Re-enable operating system and interrupts
  63. *****************************************************************************
  64. Setupsys:
  65.     Lea    $dff000,a6
  66.     Move    #$7fff,Intena(a6)    ; Clear all interrupts
  67.     Move.l    Vbl_vec,$6c.w    ; Restore VBL interrupt
  68.     Move    Int_set,d0
  69.     Or    #$c000,d0
  70.     Move    d0,Intena(a6)        ; Restore system interrupts
  71.     Move    #$7fff,Dmacon(a6)
  72.     Move    Dma_set,d0
  73.     Or    #$8200,d0
  74.     Move    d0,Dmacon(a6)        ; Restore system DMA
  75.     Move.l    Sys_copl,Cop1lch(a6)    ; Restore system copperlist
  76.     Clr    Copjmp1(a6)
  77.     Rts
  78.  
  79. Vbl_vec:              dc.l 0
  80. Int_set:              dc.l 0
  81. Dma_set:              dc.l 0
  82. Sys_copl:              dc.l 0
  83.  
  84.  
  85.  
  86. Main:
  87.     Move.l    Vposr(a6),d0
  88.     And.l    #$1ff00,d0
  89.     Cmp.l    #$00100,d0    ; Wait for vertical position 1
  90.     Bne.s    Main
  91.  
  92. ; PROGRAMM
  93.     bsr    copy
  94.     bsr    vers
  95.     btst    #6,$bfe001
  96.     bne    Main
  97.     rts
  98.  
  99. copy:
  100.     MOVE.L    #$24,D4
  101.     LEA    tab,A1   ;tab
  102.     LEA    newcopper,A0       
  103. goon:    MOVE.L    #8,D0
  104. hello:    MOVE.W    (A1)+,6(A0)
  105.     CMP.L    tabend,A1   ;tabend
  106.     BNE.S    bingo
  107.     LEA    tab,A1    ;tab
  108. bingo:    ADD.L    #$00000008,A0
  109.     cmp.l    #newcopper+[8*230],a0
  110.     bne    njet
  111.     add.l    #16,a0
  112. njet:    SUBQ.W    #1,D0
  113.     BNE    hello
  114.     SUB.L    #14,A1
  115.     SUBQ.W    #1,D4
  116.     BNE    goon
  117.     RTS    
  118. vers:
  119.     LEA    tab,A0
  120.     LEA    tabend-2,A1
  121.     MOVE.W    (A0),D0
  122. looping:MOVE.W    2(A0),(A0)
  123.     ADDQ.L    #2,A0
  124.     CMP.L    A0,A1
  125.     BNE    looping
  126.     MOVE.W    D0,(A1)
  127.     RTS    
  128.  
  129. copper:
  130.     MOVE.L    #$1a11FFFE,D0
  131.     MOVE.L    #$01800000,D1
  132.     MOVE.W    #$00b0,D4
  133.     LEA    newcopper,A0
  134. bingo1:    MOVE.L    D0,(A0)+
  135.     MOVE.L    D1,(A0)+
  136.     ADD.L    #$01000000,D0
  137.     SUB.W    #1,D4
  138.     BNE    bingo1
  139.  
  140.     MOVE.L    D0,(A0)+
  141.     MOVE.L    #$01800000,(A0)+
  142.     MOVE.L    #$CB11FFFE,(A0)+
  143.     MOVE.L    #$01800000,(A0)+
  144.     MOVE.L    #$CC11FFFE,(A0)+
  145.     MOVE.L    #$01800000,(A0)+
  146.     MOVE.L    #$CD11FFFE,(A0)+
  147.     MOVE.L    #$01800000,(A0)+
  148.     MOVE.L    #$CE11FFFE,D1
  149.     MOVE.L    #$01800000,D2
  150.     MOVE.W    #$006E,D0
  151. bingo2:    MOVE.L    D1,(A0)+
  152.     MOVE.L    #$01800000,(A0)+
  153.     ADD.L    #$01000000,D1
  154.     ADD.L    #2,D2
  155.     SUB.W    #1,D0
  156.     CMP.L    #$0011FFFE,D1
  157.     BNE    bingo2
  158.     SUB.W    #1,D0
  159.     MOVE.L    #$FFE1FFFE,(A0)+
  160.     MOVE.L    #$01B00000,(A0)+
  161.     MOVE.L    #$01B00000,(A0)+
  162.     MOVE.L    #$01B00000,(A0)+
  163. bingo3:    MOVE.L    D1,(A0)+
  164.     MOVE.L    #$01800000,(A0)+
  165.     ADD.L    #$01000000,D1
  166.     ADD.L    #2,D2
  167.     SUB.W    #1,D0
  168.     BNE    bingo3
  169.     rts
  170.     
  171.  
  172. tab:
  173.     dc.W    $000A,$000B,$000C,$000D,$000E,$000F,$000E,$000D,$000C,$000B
  174.     dc.W    $000A,$0009,$0008,$0007,$0006,$0005,$0004,$0003,$0002,$0001
  175.     dc.W    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  176.     dc.W    $0000,$0000,$0100,$0200,$0300,$0400,$0500,$0600,$0700,$0800
  177.     dc.W    $0900,$0A00,$0B00,$0C00,$0D00,$0E00,$0F00,$0E00,$0D00,$0C00
  178.     dc.W    $0B00,$0A00,$0900,$0800,$0700,$0600,$0500,$0400,$0300,$0200
  179.     dc.W    $0100,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  180.     dc.W    $0000,$0000,$0000,$0000,$0001,$0002,$0003,$0004,$0005,$0006
  181.     dc.W    $0007,$0008,$0009,$000A,$000B,$000C,$000D,$000E,$000F,$000E
  182.     dc.W    $000D,$000C,$000B
  183. tabend:
  184.  
  185.  
  186.  
  187. cop:        dc.w    $0100,$0000
  188. newcopper:            ; Unsere Copperliste
  189.     blk.b $918,0
  190. copperend:
  191.         dc.w  $ffff,$fffe
  192.